package test00.lx09;

import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.stream.Stream;

/**
 * @author ZQX
 * @date 2025-04-09
 */
public class MainTest {
    public static void main(String[] args) {
        // 第一：定义数据源
        Class<UserService> clazz = UserService.class;
        Method[] methods = clazz.getDeclaredMethods();

        // 第二：实例化流对象
        Stream<Method> stream = Arrays.stream(methods);

        // 第三：操作
        // boolean test(T t) ：过滤具有 Order 注解的方法
        stream.filter(m -> m.isAnnotationPresent(Order.class))
                // int compare(T o1, T o2) : 定义比较器，比较方法上面注解的值
                .sorted((m1, m2) -> {
                    // 获取注解值
                    int m1Value = m1.getAnnotation(Order.class).value();
                    int m2Value = m2.getAnnotation(Order.class).value();
                    // 返回比较结果
                    return m1Value - m2Value;
                })
                // R apply(T t) : 把 Method 对象转换为字符串（方法名称）
                .map(Method::getName)
                .forEach(System.out::println);

    }
}
